/**
 * plugin.js
 *
 * Released under LGPL License.
 * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
 *
 * License: http://www.tinymce.com/license
 * Contributing: http://www.tinymce.com/contributing
 */

/*global tinymce:true */

tinymce.PluginManager.add('colorpicker', function (editor) {
    function colorPickerCallback(callback, value) {
        function setColor(value) {
            var color = new tinymce.util.Color(value), rgb = color.toRgb();

            win.fromJSON({
                r: rgb.r,
                g: rgb.g,
                b: rgb.b,
                hex: color.toHex().substr(1)
            });

            showPreview(color.toHex());
        }

        function showPreview(hexColor) {
            win.find('#preview')[0].getEl().style.background = hexColor;
        }

        var win = editor.windowManager.open({
            title: 'Color',
            items: {
                type: 'container',
                layout: 'flex',
                direction: 'row',
                align: 'stretch',
                padding: 5,
                spacing: 10,
                items: [
                    {
                        type: 'colorpicker',
                        value: value,
                        onchange: function () {
                            var rgb = this.rgb();

                            if (win) {
                                win.find('#r').value(rgb.r);
                                win.find('#g').value(rgb.g);
                                win.find('#b').value(rgb.b);
                                win.find('#hex').value(this.value().substr(1));
                                showPreview(this.value());
                            }
                        }
                    },
                    {
                        type: 'form',
                        padding: 0,
                        labelGap: 5,
                        defaults: {
                            type: 'textbox',
                            size: 7,
                            value: '0',
                            flex: 1,
                            spellcheck: false,
                            onchange: function () {
                                var colorPickerCtrl = win.find('colorpicker')[0];
                                var name, value;

                                name = this.name();
                                value = this.value();

                                if (name == "hex") {
                                    value = '#' + value;
                                    setColor(value);
                                    colorPickerCtrl.value(value);
                                    return;
                                }

                                value = {
                                    r: win.find('#r').value(),
                                    g: win.find('#g').value(),
                                    b: win.find('#b').value()
                                };

                                colorPickerCtrl.value(value);
                                setColor(value);
                            }
                        },
                        items: [
                            {name: 'r', label: 'R', autofocus: 1},
                            {name: 'g', label: 'G'},
                            {name: 'b', label: 'B'},
                            {name: 'hex', label: '#', value: '000000'},
                            {name: 'preview', type: 'container', border: 1}
                        ]
                    }
                ]
            },
            onSubmit: function () {
                callback('#' + this.toJSON().hex);
            }
        });

        setColor(value);
    }

    if (!editor.settings.color_picker_callback) {
        editor.settings.color_picker_callback = colorPickerCallback;
    }
});